package alibaba.ifelserefactor.demo01.test02;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static alibaba.ifelserefactor.demo01.ShareType.TYPE_LINK;
import static alibaba.ifelserefactor.demo01.ShareType.TYPE_TEXT;

/**
 * @author ChangLiang
 * @date 2020/4/20
 */
@Slf4j
public class ShareServiceTest {

    /**
     * 内部接口一个if else都没了
     * 如果这个分享功能是自己App里面的功能，不是第三方SDK，到这里已经没问题了。
     * 但如果是第三方分享SDK的功能的话，这样暴露给用户的类增加了很多（各ShareItem的子类，相当于把if else抛给用户了）
     * 比如说前端需要调用这个SDK，那么前端传入什么呢 前端需要了解这几种分享类型，根据不同的分享类型来组装不同的类的格式
     * 用户的接入成本提高，违背了“迪米特原则”了
     */

    @Test
    @DisplayName("前端调用分享link 其需要知道Link类结构")
    public void test() {
        ShareItem shareItem = new Link(TYPE_LINK,"title","content");
        ShareService shareService = new ShareService();
        shareService.share(shareItem, (state, msg) -> log.info(msg));
    }

    @Test
    @DisplayName("前端调用分享Text 其需要知道Text类结构")
    public void test2() {
        ShareItem shareItem = new Text(TYPE_TEXT);
        ShareService shareService = new ShareService();
        shareService.share(shareItem, (state, msg) -> log.info(msg));
    }
}
